home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
aminet
/
util
/
misc
/
ddli2_02.lha
/
fpdio.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-03-01
|
3KB
|
123 lines
/* FPDIO.C Copyright (C) 1993 Fergus Patrick Duniho */
#ifndef _FPDIO_C
#define _FPDIO_C
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#define RdOpen(X,Y) X=FDOpen(Y, "r")
#define WrOpen(X,Y) X=FDOpen(Y, "w")
#define ApOpen(X,Y) X=FDOpen(Y, "a")
void wrapwrite (FILE *fptr, int ind, int lm, int rm, char *s, ...);
int wrdlen(char *s);
int fgetp (FILE *fptr);
FILE *FDOpen (const char *fn, const char *mode);
int Linefeeds (char *fname);
char *clone_line (FILE *fptr, int max);
void wrapwrite (FILE *fptr, int ind, int lm, int rm, char *s, ...) {
va_list ap;
int i, j, l;
va_start(ap, s);
for (j = ind; ; j = lm) {
for (i = 0; i < j; i++)
fputc (' ', fptr);
for (i = j; i < rm; i++)
switch (*s) {
case '\0': /* End of string reached */
if (*(s = va_arg(ap, char *)) == '\0') {
fputc ('\n', fptr);
va_end(ap);
return;
}
if ((i + wrdlen(s)) >= rm)
i = rm;
else if (i > j)
fputc (' ', fptr);
break;
case ' ': /* End of word reached */
if ((i + wrdlen(++s)) >= rm)
i = rm;
else if (i > j)
fputc (' ', fptr);
break;
case '\n': /* End of line reached */
i = rm;
s++;
break;
default:
fputc (*s++, fptr);
}
fputc ('\n', fptr);
if ((*s == '\0') && (*(s = va_arg(ap, char *)) == '\0')) {
va_end(ap);
return;
}
}
}
int wrdlen(char *s) {
int r;
for (r = 0; *s != ' ' && *s != '\n' && *s != '\0'; r++, s++);
return r;
}
int fgetp (FILE *fptr) {
int c, tot = 0;
while (!isdigit(c = getc(fptr)))
if (c == EOF)
return EOF;
do {
tot *= 10;
tot += (c - '0');
} while (isdigit(c = getc(fptr)));
if (c != '\n')
ungetc (c, fptr);
return tot;
}
FILE *FDOpen (const char *fn, const char *mode) {
FILE *fptr;
if ((fptr = fopen(fn, mode)) == NULL) {
fprintf (stderr, "Could not open %s.", fn);
exit (2);
}
return fptr;
}
int Linefeeds (char *fname) {
FILE *fptr;
int c, cnt = 0;
RdOpen (fptr, fname);
while ((c = getc(fptr)) != EOF)
if (c == '\n')
cnt++;
fclose (fptr);
return cnt;
}
char *clone_line (FILE *fptr, int max) {
char *s, *r, *t;
int i;
s = (char *)malloc(max + 1);
t = s;
for (i = 0; (i < max) && ((*s = fgetc(fptr)) != '\n'); i++, s++);
if (*s != '\n')
ungetc(*s, fptr);
*s = '\0';
r = strdup(t);
free (t);
return r;
}
#endif /* _FPDIO_C */